<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 深复制与浅复制针对的是引用类型而言。
    // 值类型的复制是深复制还是浅复制？答：深复制。
    {
        let a = 1;
        let b = a;
    }
    {
        // 针对于简单引用类型，那么以下属于深复制。
        // // 1
        // let obj = {
        //     a:1,
        //     b:2,
        //     c:3
        // }
        // const obj2 = {
        //     ...obj
        // }
        // // 2
        // const obj3 = {};
        // for(let key in obj){
        //     obj3[key]=obj[key];
        // }
        // console.log(obj3 === obj);
        //
        // // 3
        // const obj4 = Object.assign({},obj);
        //
        // // 4
        // const arr = [1,2,3,4];
        // const arr2 = [...arr];
        // const arr3 = Array.from(arr);
        // const arr4 = [].concat(arr);
        // const arr5 = arr.map(item=>item);
    }
    {
        // 针对于复杂类型
        const obj = {
            a:1,
            b:2,
            info:{
                userName:"zhangsan",
                age:12
            },
            my:undefined,
            arr:[1,2,3,4]
        }
        // const obj3 = {...obj};
        // console.log(obj === obj3);// false
        // console.log(obj.info === obj3.info);// true
        // console.log(obj.arr === obj3.arr);// true
        // obj.info.userName = "Lisi";
        // console.log(obj3.info.userName);// lisi

        // const obj4 = JSON.parse(JSON.stringify(obj));
        // console.log(obj === obj4);// false
        // console.log(obj.info === obj4.info);// false
        // console.log(obj.arr === obj4.arr);// false
        // console.log(obj,obj4)

        function deepClone(instance){
            if(typeof instance !== "object") return instance;
            let result = Array.isArray(instance)?[]:{};
            for(let key in instance){
                if(typeof instance[key] === "object"){
                    result[key] = deepClone(instance[key])
                }else
                    result[key] = instance[key];
            }
            return result;
        }
        const obj5 = deepClone(obj);
        console.log(obj5===obj);
        console.log(obj5.arr===obj.arr);
        console.log(obj5.info===obj.info);


    }
</script>
</html>